/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beancomentarios;

import beancomentarios.editor.Editor;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;
import javax.swing.*;

/**
 * Panel que muestra el editor de comentarios
 * @author Miguel González - Ceura
 */
public class JBeanComentarios extends JPanel
        implements ComentarioListener, Serializable {

    public static final int IDIOMA_E = 1;
    public static final int IDIOMA_I = 2;
    
    private ModeloComentarios modelo;
    private Editor editor;
    private JButton btnEscribir;
    private JPanel panelComentarios;
    private JScrollPane scrollComentarios;
    private int contadorComentarios;
    
    /**
     * Constructor del editor que recibe un modelo para inicializarse
     * @param modelo ModeloComentario
     */
    public JBeanComentarios(ModeloComentarios modelo) {
        this.modelo = modelo;
        
        init();
    }
    
    /**
     * Cambia el idioma de la interfaz
     * @param tipoIdioma Tipo de idioma (IDIOMA_E | IDIOMA_I)
     */
    public void cambiarIdioma(int tipoIdioma) {
        if(tipoIdioma == IDIOMA_E) {
            btnEscribir.setText("Escribir comentario");
        } else if(tipoIdioma == IDIOMA_I) {
            btnEscribir.setText("Write comment");
        }
    }
    
    /**
     * Constructor del editor por defecto, construye un modelo vacío
     */
    public JBeanComentarios() {
        modelo = new ModeloComentarios();
        
        init();
    }
    
    /**
     * Inicializa los componentes gráficos y los listeners
     */
    private void init() {
        //Escuchamos el modelo de los comentarios
        modelo.addComentarioListener(this);
        editor = new Editor();
        btnEscribir = new JButton("Escribir comentario");
        btnEscribir.addActionListener(new EscribirComentario());
        panelComentarios = new JPanel();
        panelComentarios.setLayout(new BoxLayout(panelComentarios,
                BoxLayout.Y_AXIS));
        contadorComentarios = 0;
        
        setLayout(new BorderLayout());
        
        JPanel panelEditor = new JPanel();
        panelEditor.setLayout(new BorderLayout());
        panelEditor.add(editor, BorderLayout.NORTH);
        panelEditor.add(btnEscribir, BorderLayout.CENTER);
        
        scrollComentarios = new JScrollPane(panelComentarios);
        
        add(scrollComentarios, BorderLayout.CENTER);
        add(panelEditor, BorderLayout.SOUTH);
        
        //Cargamos los comentarios que haya del modelo
        for(Comentario comentario : modelo.getComentarios()) {
            publicarComentario(comentario);
        }
    }

    /**
     * Evento que se produce al añadir un comentario al modelo, se encarga
     * de pintarlo en pantalla
     * @param evt ComentarioEvent
     */
    @Override
    public void addedComentario(ComentarioEvent evt) {
        publicarComentario(evt.getComentario());
    }

    /**
     * Evento que se produce al quitar un comentario al modelo, no hace nada
     * @param evt ComentarioEvent
     */
    @Override
    public void removedComentario(ComentarioEvent evt) {
    }
    
    /**
     * Evento producido al pulsar el botón de EscribirComentario, lo añade al modelo
     */
    private class EscribirComentario implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            if(!editor.getTexto().isEmpty()) {
                modelo.addComentario(new Comentario(editor.getTexto()));
                editor.setText("");
            }
        }
        
    }
    
    /**
     * Muestra un comentario en el panel gráfico
     * @param comentario ComentarioEvent
     */
    private void publicarComentario(Comentario comentario) {
        JPanel panelComentario = new JPanel();
        panelComentario.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
        
        panelComentario.setLayout(new BoxLayout(panelComentario, BoxLayout.Y_AXIS));
        panelComentario.add(new JLabel(comentario.getFecha()));
        
        if(contadorComentarios%2 == 0) {
            panelComentario.setBackground(Color.decode("#FFFFFF"));
        } else {
            panelComentario.setBackground(Color.decode("#F0E6D5"));
        }
        
        String comentarioMultilinea = "<html>";
        String[] lineasComentario = comentario.getTexto().split("\n");
        for(String linea : lineasComentario) {
            linea = linea.replaceAll(" ", "&nbsp;");
            comentarioMultilinea += linea + "<br>";
        }
        comentarioMultilinea+="</html>";
        panelComentario.add(new JLabel(comentarioMultilinea));

        panelComentarios.add(panelComentario);
        panelComentarios.updateUI();
        contadorComentarios++;
    }
}
